#ifndef RT_COLOR
#define RT_COLOR

#define MAX( a, b ) ( ( a > b ) ? a : b )
#define MIN( a, b ) ( ( a < b ) ? a : b )
#define CLAMP( intensity ) MAX( 0.0, MIN( 1.0, intensity ) )

class Color {
	public:
	double r;
	double g;
	double b;

	/* A cor padrão é Branco */
	Color();
	Color (int r, int g, int b);
	/* Seta a cor informada */
	Color(double r, double g, double b);
	/* Coma as cores */
	Color* addition(Color *color);
	/**
 	* Amplia ou reduz o brilho de uma cor, multiplicando-o por um fator.
 	*/
	Color* scale(double s);
	/**
	* Multiplica duas cores.
	* Útil para obter a cor de um material iluminado por uma luz ambiente.
	*/
	Color* multiplication(Color *color);

	/**
	* Cor refletida por um material iluminado por uma certa luz, usando um
	* coeficiente especificado (scale). Útil nos cálculos de iluminação.
	*/
	Color* reflection(double s,Color *color);
};

#include "color.cpp"
#endif
